package main

import (
	"flag"
	"mime"
	"os"
	"stforum/beforecheck"
	"stforum/databases"
	"stforum/global"
	"stforum/server"
	"stforum/sthelp"
	"testing"

	"github.com/dingdinglz/dingtools/dinglog"
	"github.com/gin-gonic/gin"
)

func init() {
	//解析命令行参数
	global.Debug = flag.Bool("debug", false, "启动debug模式")
	global.ReInit = flag.Bool("reinit", false, "重新初始化程序")
	testing.Init()
	flag.Parse()
}

//程序入口 功能分模块设计 入口只负责启动各项功能
func main() {
	//解决windows js文件类型不正确问题
	mime.AddExtensionType(".js", "application/javascript")
	global.Logger = dinglog.NewLogger()
	if *global.Debug {
		global.Logger.SetLevel(dinglog.Level_Debug)
		gin.SetMode(gin.DebugMode)
	} else {
		gin.SetMode(gin.ReleaseMode)
	}
	if *global.ReInit {
		global.Logger.Info("正在删除初始化锁...")
		if sthelp.PathExists("st.lock") {
			err := os.Remove("st.lock")
			if err != nil {
				global.Logger.Error("删除初始化锁失败，请以高权限重新启动")
				os.Exit(1)
			}
		}
	}
	//检查文件夹是否存在
	global.Logger.Info("正在检查文件夹...")
	beforecheck.CheckFolders()
	//启动数据库
	databases.StartSettingDatabases() //设置数据库
	//启动服务器

	global.Logger.Info("正在启动服务器...")
	server.Start()
}
